1、集群管理常用命令
// 集群(cluster) ?
CLUSTER INFO ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?打印集群的狀態(tài)信息 ?
CLUSTER NODES ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 列出集群當前已知的所有節(jié)點(node),以及這些節(jié)點的相關(guān)信息?
// 節(jié)點(node) ?
CLUSTER MEET <ip> <port> ? ? ? ? ? ? ? ? ? ?將ip和port所指定的節(jié)點添加到集群當中,讓它成為集群的一份子
CLUSTER FORGET <node_id> ? ? ? ? ? ? ? ? ? ?從集群中移除node_id指定的節(jié)點
CLUSTER REPLICATE <node_id> ? ? ? ? ? ? ? ? 將當前節(jié)點設(shè)置為node_id指定節(jié)點的從節(jié)點
CLUSTER SAVECONFIG ? ? ? ? ? ? ? ? ? ? ? ? ?將當前節(jié)點的配置信息手動保存到硬盤(nodes-port.conf)?
CLUSTER SLAVES <master_node_id> ? ? ? ? ? ? 查詢指定的master_node_id主節(jié)點有哪些從(slave)節(jié)點
// 槽(slot) ?
CLUSTER ADDSLOTS <slot> [slot ...] ? ? ? ? ?將一個或多個槽(slot)指派(assign)給當前節(jié)點
CLUSTER DELSLOTS <slot> [slot ...] ? ? ? ? ?將一個或多個槽從當前節(jié)點移除
CLUSTER FLUSHSLOTS ? ? ? ? ? ? ? ? ? ? ? ? ?移除指派給當前節(jié)點的所有槽,讓當前節(jié)點變成一個沒有指派任何槽的節(jié)點
CLUSTER SETSLOT <slot> NODE <node_id> ? ? ? 將當前節(jié)點指定的槽(slot)指派給node_id指定的節(jié)點,如果槽已經(jīng)指派給另一個節(jié)點,那么先讓另一個節(jié)點刪除該槽,然后再進行指派
CLUSTER SETSLOT <slot> MIGRATING <node_id> ?將當前節(jié)點指定的槽(slot)遷移到node_id指定的節(jié)點中
CLUSTER SETSLOT <slot> IMPORTING <node_id> ?從node_id指定節(jié)點中的槽(slot)導(dǎo)入到當前節(jié)點
CLUSTER SETSLOT <slot> STABLE ? ? ? ? ? ? ? 取消對當前節(jié)點指定槽(slot)的導(dǎo)入(import)或者遷移(migrate)
CLUSTER SLOTS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 查看槽(slot)在集群中的分配情況
// 鍵 (key) ?
CLUSTER KEYSLOT <key> ? ? ? ? ? ? ? ? ? ? ? 計算鍵key應(yīng)該被分配在哪個槽上 ?
CLUSTER COUNTKEYSINSLOT <slot> ? ? ? ? ? ? ?返回指定槽(slot)保存key的數(shù)量 ?
CLUSTER GETKEYSINSLOT <slot> <count> ? ? ? ?獲取指定槽(slot)中count個key,如果指定槽中大于count個key,則只返回前cout個key,小于或為空,則返回最多數(shù)量的key?
以上命令是集群特有的,必須登錄到redis集群才能使用。注釋中提到的當前節(jié)點,指登錄到集群中指定的節(jié)點。如:redis-cli -h 192.168.0.201 -p 6379
,當前登錄的節(jié)點就是192.168.0.201:6379。
更多集群管理命令請參考官網(wǎng)
shell> redis-cli -c -h 192.168.0.201 -p 6379
127.0.0.1:6379> cluster nodes
459dbcccc1e5be021f19efde794b9e84474c0c02 192.168.0.202:16379 slave b6814c717080de33907e6f769e1fd8dc4fe53c38 0 1468339459776 11 connected
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 10 connected 500-11255
91179b96d9b8abce85fa7a5748aa9b4114f0b260 192.168.0.202:16380 slave 06023f8283389ad5580c782797f49a5996c108b3 0 1468339462797 10 connected
ef8a49e5242c791551f1b317d5039144e38acde6 192.168.0.201:6380 slave 13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 0 1468339466819 8 connected
b6814c717080de33907e6f769e1fd8dc4fe53c38 192.168.0.201:6381 master - 0 1468339465813 11 connected 0-499
13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 192.168.0.202:16381 master - 0 1468339463802 8 connected 11256-16383
2、添加節(jié)點
添加一對(一主一從)新的節(jié)點加入到集群當中:192.168.0.201:6382(Master)和192.168.0.201:6383(Slave),文中簡稱201:6381和201:16382。
1> 添加master節(jié)點
shell> redis-trib.rb add-node 192.168.0.201:6382 192.168.0.201:6379
參數(shù)說明:
192.168.0.201:6382:新節(jié)點
192.168.0.201:6379:可以是集群中的任意一個節(jié)點(這里以201:6379為例)
注意:
1> 新的節(jié)點必須開啟了集群配置
2> 新的節(jié)點必須已啟動
如果不同時滿足以上兩點,將無法加入到集群中。成功加入集群后,會打印如下信息:
2> 為master節(jié)點分配slot
當往Redis集群中存儲一份數(shù)據(jù)時,redis根據(jù)key的hash值對16384(slot)取模,算出負責指定slot范圍內(nèi)的某個節(jié)點來存儲這個key。集群在第一次創(chuàng)建的時候,會給每個master節(jié)點在16384個slot中平均分配相應(yīng)的slot數(shù)量,而后面新加入的master節(jié)點默認是不會分配slot的。所以我們需要手動為新加入的節(jié)點分配一定范圍的slot,以便集群在存取數(shù)據(jù)的時候,能夠找到這個新加入的節(jié)點。
[root@localhost redis-3.2.0]# redis-cli cluster nodes
901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6382 master - 0 1468324422110 0 connected
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 1 connected 0-5460
...
sloat范圍顯示在節(jié)點狀態(tài)(connected)后邊,從上可以看出,新加入的節(jié)點201:6382是沒有分配slot的,所以為空。而為201:6379節(jié)點分配了0-5460范圍的slot。
為新節(jié)點分配slot的原理是從其它主節(jié)點中負責的slot中,各移出一部份
slot給新的節(jié)點。下面為201:6382分配slot:
shell> redis-trib.rb reshard 192.168.0.201:6382
注意上圖中紅框部份:
1> 1000 : 為新的master節(jié)點分配1000個slot
2> 901cade1bc2703ef2bb4ff49466b38762346755d:接收1000個slot的master節(jié)點ID
3> 選擇從哪些主節(jié)點移動slot到新加入的主節(jié)點中:
* all:表示從集群中所有master節(jié)點中各移動一部份slot,湊夠1000個slot為止
* 選擇輸入一個或多個master的node_id來從中移動,最后輸入done完成選擇
4> yes:執(zhí)行slot移動操作,輸入no表示終止操作。
下面看下新的集群節(jié)點及slot分布情況:
[root@localhost redis-3.2.0]# redis-cli cluster nodes
901cade1bc2703ef2bb4ff49466b38762346755d 192.168.0.201:6382 master - 0 1468325773988 9 connected 0-332 5461-5794 10923-11255
459dbcccc1e5be021f19efde794b9e84474c0c02 192.168.0.202:16379 slave b6814c717080de33907e6f769e1fd8dc4fe53c38 0 1468325769968 7 connected
06023f8283389ad5580c782797f49a5996c108b3 192.168.0.201:6379 myself,master - 0 0 1 connected 333-5460
91179b96d9b8abce85fa7a5748aa9b4114f0b260 192.168.0.202:16380 slave 06023f8283389ad5580c782797f49a5996c108b3 0 1468325775495 5 connected
ef8a49e5242c791551f1b317d5039144e38acde6 192.168.0.201:6380 slave 13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 0 1468325772982 8 connected
b6814c717080de33907e6f769e1fd8dc4fe53c38 192.168.0.201:6381 master - 0 1468325771976 7 connected 5795-10922
13567f6f8787d3aa3f4ef3abd15c2cc500a1469b 192.168.0.202:16381 master - 0 1468325774992 8 connected 11256-16383
已經(jīng)成功為201:6382節(jié)點分配了0-332、5461-5794、10923-11255范圍的slot,可以看出redis從其它三個master節(jié)點中均勻的移動了一部份slot到201:6382中。